﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TMS.formularios
{
    public partial class UICrearModulo : System.Web.UI.Page
    {
        //Almacena el nombre del modulo seleccionado en lstModEnApp para su uso en alguna posible modificacion.
        static string nombreMod = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                limpiarForm();
                loadAppDDL();

            }
        }
        public void limpiarForm()
        {
            lblIdM.Text = "";
            txtTipoModulo.Text = "";
            txtNombre.Text = "";
            txtDescripcion.Text = "";


        }
        public void loadAppDDL()
        {
            ddApp.Items.Clear(); // Borra el contenido de la lista de aplicaciones disponibles.
            ListItem unL = new ListItem("Elija una aplicacion...", "" + 0);
            ddApp.Items.Add(unL);
            foreach (Aplicacion ap in Dios.getInstancia().listarApps())
            {
                ListItem l = new ListItem(ap.Nombre, "" + ap.Id);
                ddApp.Items.Add(l);
            }
            ddApp.SelectedIndex = 0;
        }
        public void loadModList(long appId)
        {
            lstModEnApp.Items.Clear(); // Borra el contenido de la lista de modulos disponibles.
            List<Modulo> modlist = Dios.getInstancia().listarModsByAppId(appId);
            //Si la aplicacion contiene modulos...
            if (modlist.Count() != 0)
            {
                foreach (Modulo mo in modlist)
                {
                    ListItem l = new ListItem(mo.ToString(), "" + mo.Id);
                    lstModEnApp.Items.Add(l);
                }
            }
            else
            {
                //Si no contiene modulos carga un aviso indicandolo en el listbox.
                ListItem unL = new ListItem("La aplicacion no contiene modulos...", "" + 0);
                lstModEnApp.Items.Add(unL);
            }
            lstModEnApp.SelectedIndex = -1;
        }

        protected void ddApp_SelectedIndexChanged(object sender, EventArgs e)
        {
            limpiarForm();
            loadModList(long.Parse(ddApp.SelectedValue));
        }
        public void loadDDLAplicacion()
        {
            ddAplicacion.Items.Clear(); // Borra el contenido de la lista de aplicaciones disponibles.
            foreach (Aplicacion ap in Dios.getInstancia().listarApps())
            {
                ListItem l = new ListItem(ap.Nombre, "" + ap.Id);
                ddAplicacion.Items.Add(l);
            }
            ddAplicacion.SelectedIndex = -1;
        }
        public void loadDDLDesarrollador()
        {
            //Carga el DropDownList de Desarrolladores.
            ddlDesarrollador.Items.Clear(); // Borra el contenido de la lista de desarrolladores disponibles.
            foreach (Developer dev in Dios.getInstancia().listarDevs())
            {
                ListItem l = new ListItem(dev.Nombre, "" + dev.NroUsuario);
                ddlDesarrollador.Items.Add(l);
            }
            ddlDesarrollador.SelectedIndex = -1;
        }
        protected void lstModEnApp_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lstModEnApp.SelectedValue != "0")
            {
                limpiarForm();
                Modulo mod = Dios.getInstancia().getModById(long.Parse(lstModEnApp.SelectedValue));
                lblIdM.Text = "" + mod.Id;
                txtNombre.Text = mod.Nombre;
                //Se asigna el nombre del modulo a la variable nombreMod.
                nombreMod = mod.Nombre;
                txtTipoModulo.Text = mod.Tipo;
                txtDescripcion.Text = mod.Descripcion;
                loadDDLAplicacion();
                ddAplicacion.SelectedIndex = ddAplicacion.Items.IndexOf(ddAplicacion.Items.FindByValue("" + mod.Aplicacion.Id));
                loadDDLDesarrollador();
                ddlDesarrollador.SelectedIndex = ddlDesarrollador.Items.IndexOf(ddlDesarrollador.Items.FindByValue("" + mod.Developer.NroUsuario));
            }
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            lblAdvertencia.Text = "";
            if (lstModEnApp.SelectedValue != "0")
            {
                if ((txtNombre.Text != nombreMod && !Dios.getInstancia().existeModulo(txtNombre.Text)) || txtNombre.Text == nombreMod)
                {
                    long id = long.Parse(lblIdM.Text);
                    string nom = txtNombre.Text;
                    string tipo = txtTipoModulo.Text;
                    string desc = txtDescripcion.Text;
                    long idApp = long.Parse(ddAplicacion.SelectedValue);
                    long idDev = long.Parse(ddlDesarrollador.SelectedValue);
                    Dios.getInstancia().modModulo(id, tipo, nom, desc, idApp, idDev);
                    loadModList(long.Parse(ddApp.SelectedValue));
                    limpiarForm();
                }
                else
                {
                    lblAdvertencia.Text = "Ya existe un modulo con ese nombre registrado en el sistema...";
                }
            }
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            if (lstModEnApp.SelectedValue != "0")
            {
                Dios.getInstancia().removeModulo(long.Parse(lblIdM.Text));
                loadModList(long.Parse(ddApp.SelectedValue));
                limpiarForm();
            }
        }
    }
}